package qc.module.qms.dto.mq;

import lombok.Data;
import qc.common.core.enums.qms.QmsDataFlowOperateTypeEnum;
import qc.common.core.enums.qms.QmsPointDataQualityEnum;
import qc.common.core.enums.qms.QmsPointTimeSegmentEnum;
import qc.module.qms.dto.pointdata.QmsPointDataSaveAffectDto;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 点号数据消息队列消息DTO，一次操作对应一条消息，一次只对一个点号进行操作，可以包含多个时间的数据，操作包含新增、修改、删除、设置质量标记
 *
 * @author QuCheng Tech
 * @since 2025/8/19
 */
@Data
public class QmsMqPointDataMessageDto extends QmsDataFlowContextDto {
    /**
     * 点号ID
     */
    private String pointid;

    /**
     * 点号时段类型
     */
    private QmsPointTimeSegmentEnum tmseg;

    /**
     * 是否为人工操作，人工录入、修改、删除、修改数据质量标记
     */
    private boolean isManual;

    /**
     * 操作类型，点号数据保存或设置数据质量操作类型，取值为枚举类型中的3x范围
     * 用于区分是人工录入/修改数据保存、系统自动计算数据保存、数据同步数据保存等
     * 在数据同步数据保存时不再触发数据当前操作数据的同步消费
     */
    private QmsDataFlowOperateTypeEnum optype;

    /**
     * 为人工操作时的操作用户名称
     */
    private String userName;

    /**
     * 人工设置数据质量（删除、错误、人工数据），如果不是人工操作的3种数据标识是人工进行录入或修改数据
     */
    private QmsPointDataQualityEnum quality;

    /**
     * 在为人工设置数据质量时表示操作的起始数据时标，在为数据保存时表示实际受影响的起始数据时标
     */
    private LocalDateTime beginTime;

    /**
     * 在为人工设置数据质量时表示操作的截止数据时标，在为数据保存时表示实际受影响的截止数据时标
     */
    private LocalDateTime endTime;

    /**
     * 受影响的点号数据集合，包含新增、修改(仅包含修改数据值、不包含修改数据质量标记)的点号数据
     */
    private List<QmsPointDataSaveAffectDto> affectDatas;

    /**
     * 受影响的数据条数，成功条数
     */
    private int affectCount;

    /**
     * 失败的数据条数，保存失败条数
     */
    private int failCount;
}
